//
//  ApexServer.h
//  ApexPush
//
//  Created by User on 2019/1/3.
//

#import <Foundation/Foundation.h>
#import "ApexPushDomain.h"
#import "ApushHttpOption.h"

NS_ASSUME_NONNULL_BEGIN
//clientId模式
typedef NS_ENUM(NSUInteger,ApexServerClientIdMode) {
    ApexServerClientIdModeDefault = 0,//默认，每次卸载都会重新生成
    ApexServerClientIdModeDevice//设备唯一，每次卸载不会重新生成，除非刷机
};
//tls证书模式
typedef NS_ENUM(NSUInteger,ApexServerCertificateMode) {
    ApexServerCertificateModeOne = 0,//单向认证
    ApexServerCertificateModeTwo//双向认证
};

@interface ApexServer : NSObject
@property (nonatomic,strong) NSArray<ApexPushDomain *> *host;//消息地址数组
@property (nonatomic,copy) NSString *appId;//应用id
@property (nonatomic,assign,getter=isCleanSession) BOOL  cleanSession;//关闭时是否放弃之前的会话
@property (nonatomic,copy) NSString *ext;//扩展参数，现在无用
@property (nonatomic,assign) ApexServerClientIdMode clientIdMode;//clientId的模式
@property (nonatomic,assign,getter=isTLS) BOOL tls;//是否使用tls
/**
 说明:1、启用tls,der格式的证书路径(derPath)不能为空
     2、certificateMode为单向认证时,p12格式的证书路径(p12Path)可以为空
     3、certificateMode为双向认证时,p12格式的证书路径(p12Path)和证书密码(p12Password可以为@"")不可为空
 */
/**
 证书生成方式:
 1、双向认证方法:让后台生成 ca.crt 和 client.p12文件(client.p12文件由client.crt和client.key合成)
 2、单向认证方法：让后台生成 ca.crt
 3、使用命令行把crt转化为der格式
    openssl x509 -in ca.crt -out ca.der -outform der
 */
@property (nonatomic,assign) ApexServerCertificateMode certificateMode;//认证模式
@property (nonatomic,copy) NSString *p12Path;//客户端p12证书路径
@property (nonatomic,copy) NSString *p12Password;//客户端p12证书密码
@property (nonatomic,copy) NSString *derPath;//客户端der证书路径
//服务器用户名密码认证才设置
@property (nonatomic,copy) NSString *authUserName;//认证用户名,根据服务端配置设置
@property (nonatomic,copy) NSString *authPassword;//认证用密码,根据服务端配置设置
@property (nonatomic,strong) ApushHttpOption *httpOption;//网络接口对象
@end

NS_ASSUME_NONNULL_END
